package 字符串;

/**
 * @Author Weton Li
 * @Date 2021/4/2 11:47
 */
public class 二进制求和 {

    public static String method(String s1, String s2) {
        StringBuilder sb = new StringBuilder();
        int add = 0; // 进位初始0

        int s1Len = s1.length() - 1;
        int s2Len = s2.length() - 1;
        for (int i = s1Len, j = s2Len; i >= 0 || j >= 0; i--, j--) {

            int sum = add; // 保留进位，勿遗失，初始sum为进位
//            int up = s1.charAt(i) - '0';
//            int down = s2.charAt(j) - '0';
//            sum = sum + up + down; // 勿遗失sum

//            if (i >= 0) {
//                sum=sum+(s1.charAt(i)-'0');
//            }
//
//            if (j >= 0) {
//                sum=sum+(s2.charAt(j)-'0');
//            }

//             简便写法
            sum = sum + (i >= 0 ? s1.charAt(i) - '0' : 0);
            sum = sum + (j >= 0 ? s2.charAt(j) - '0' : 0);


            sb.append(sum % 2); // 竖式相加的结果，对2取余，即为当前位的值
            add = sum / 2; // 判断是否有进位
        }
        sb.append(add == 1 ? add : ""); // 从右向左竖式计算，若最终有进位，则追加进位
        return sb.reverse().toString(); // 反转字符串

    }

    public static void main(String[] args) {
        String input1 = "11";
        String input2 = "1";
        System.out.println(method(input1, input2));

//        String s = "1";
//        for (int i = 0; i < 1; i++) {
//            char c = s.charAt(i);
//            System.out.println(c);
//        }
    }
}
